home *** CD-ROM | disk | FTP | other *** search
- /*****************************************************************************
- MODULE: rwarn.c
- PURPOSE: recio warning functions
- COPYRIGHT: (C) 1994 William Pierpoint
- COMPILER: Borland C Version 3.1
- OS: MSDOS Version 6.2
- VERSION: 2.00
- RELEASE: April 15, 1994
- *****************************************************************************/
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- #include "recio.h"
-
- #define rflags(rp) ((rp)->r_flags)
-
- static void (*_r_warnfn)(REC *) = NULL; /* ptr to warning function */
-
- /****************************************************************************/
- void /* returns nothing */
- rsetwarnfn( /* registers a callback warning function */
- void(*rwarnfn)(REC *rp)) /* pointer to warning function */
- /****************************************************************************/
- {
- _r_warnfn = rwarnfn; /* point to callback warning function */
- }
-
- /****************************************************************************/
- int /* returns warning number (0=no warning */
- rwarning( /* gets warning number for record stream */
- REC *rp) /* record pointer */
- /****************************************************************************/
- {
- int warnum=0; /* return warning number */
-
- if (risvalid(rp)) {
- warnum = rflags(rp) / _R_WRN;
- warnum &= _R_WRNMASK;
- }
- return (warnum);
- }
-
- /****************************************************************************/
- int /* returns possibly modified warning number */
- rsetwarn( /* sets warning number and calls warning fn */
- REC *rp, /* record pointer */
- int warnum) /* warning number */
- /****************************************************************************/
- {
- /* if valid record pointer */
- if (risvalid(rp)) {
-
- /* set warning number on stream */
- rflags(rp) |= _R_WRN * (warnum & _R_WRNMASK);
-
- /* invoke callback warning function */
- if (_r_warnfn) _r_warnfn(rp);
-
- /* find out if warnfn() changed warning */
- warnum = rwarning(rp);
- }
- return (warnum);
- }
-
- /****************************************************************************/
- char * /* returns warning message */
- rstrwarning( /* gets warning message for rwarning number */
- int warnum) /* warning number */
- /****************************************************************************/
- {
- switch (warnum) {
- case 0: return ("no warning");
- case R_WEMPSTR: return ("empty data string");
- case R_WNOREG: return ("unable to register function with atexit()");
- case R_WWIDTH: return ("data too wide for columnar output");
- }
- return ("unknown warning");
- }
-
- /****************************************************************************/
- char * /* returns warning message */
- rwarnstr( /* gets warning message for record stream */
- REC *rp) /* record pointer */
- /****************************************************************************/
- {
- return (risvalid(rp) ? rstrwarning(rwarning(rp)) : rstrerror(R_EINVAL));
- }
-